Bidirectional print router communications in a distributed printing environment

ABSTRACT

Methods, systems, and devices are described for bidirectional print router communication in a distributed printing environment. In these methods, systems, and devices, a print router receives a print job from a print job source over a unidirectional print data path. The print router forwards the print job to a first print job destination associated with a first printer, and receives a first message from the first printer. The first message may be forwarded to the print job source, and a second message from the print job source may also be received. The print job is then transmitted from the print router to a second print job destination associated with a second printer based on the first message from the first printer, a set of rules, and/or the second message received from the print job source.

CROSS REFERENCES

The present application claims priority from U.S. Provisional Patent Application Ser. No. 61/394,264, which is incorporated herein by reference in its entirety for all it discloses.

BACKGROUND

Embodiments of the invention relate to computer network communication, and more particularly, printing in a dynamic roaming environment. Organizations often use a variety of computing devices. Various computer systems may use a thin-client or a virtual desktop display in conjunction with a centralized server or mainframe, and also use traditional workstations and handheld devices.

A thin-client may be a computing device that includes hardware, software, or both in a client-server architecture network. However, such a network may use a central server for processing and may transmit and receive input and output over a network or other communication medium established between the device and the remote server. In some examples, a thin-client device may run web browsers or remote desktop software, such that significant processing may occur on the server.

Printing in such environments may present a number of significant challenges. Traditionally, print drivers are stored and maintained on each device, and this can cause administrative overhead and maintenance issues. The problem may be exacerbated with mobile thin-clients and other mobile devices, as the number of drivers that may need to be stored can increase substantially as more printers become available.

There are also challenges related to communicating with printers in a dynamic environment. For example, in a distributed printing system, it may be a challenge to receive and process printer status updates in a dynamic environment using a unidirectional backend architecture. Thus, there may be a need in the art for novel system architectures to address one or more of these issues.

SUMMARY

Methods, systems, and devices are described for bidirectional print router communications in a distributed printing environment.

In one set of embodiments, a distributed printing system includes a number of printers, a print job source configured to generate a print job, a backend in communication with the print job source, and a print router in communication with the backend and a number of print job destinations associated with a number of printers. The backend receives a print job from the print job source and transmits the print job over a unidirectional print data path to a print router. The print router receives the print job from the backend over the unidirectional print data path of the backend, transmits the print job to a first print job destination associated with a first printer, receives a first message from the first printer, and receives a second message from the print job source over a network path separate from the unidirectional print data path of the backend. The print router then transmits the print job to a second print job destination associated with a second printer based on the first message from the first printer and the second message from the print job source.

In another set of embodiments, a method of printing in a distributed printing environment includes receiving a print job at a print router from a print job source over a unidirectional data path. The print job is transmitted from the print router to a first print job destination associated with a first printer of a number of printers in communication with the print router. A first message is received from the first printer at the print router, and the print job is transmitted from the print router to a second print job destination associated with a second printer based on the first message from the first printer and a set of rules.

In another set of embodiments, a print router apparatus includes a print data receiving module, a print data forwarding module, and a message processing module. The print data receiving module is configured to receive a print job from a print job source over a unidirectional print data path of a backend. The print data forwarding module is communicatively coupled with the print data receiving module and configured to transmit the print job from the print router to a first print job destination associated with a first printer. The message processing module is configured to receive a first message from the first printer and trigger the print data forwarding module to transmit the print job to a second print job destination associated with a second printer based on the first message from the first printer and a set of rules.

BRIEF DESCRIPTION OF THE DRAWINGS

A further understanding of the nature and advantages of the present invention may be realized by reference to the following drawings. In the appended figures, similar components or features may have the same reference label. Further, various components of the same type may be distinguished by following the reference label by a dash and a second label that distinguishes among the similar components. If only the first reference label is used in the specification, the description is applicable to any one of the similar components having the same first reference label irrespective of the second reference label.

FIG. 1 is a block diagram illustrating a system for distributed printing in a dynamic roaming and traditional static environments, according to various embodiments of the invention.

FIG. 2 is a block diagram illustrating a central server computer system in a system for distributed printing in a dynamic roaming and traditional static environments, according to various embodiments of the invention.

FIG. 3 is a block diagram illustrating a data store in a system for distributed printing in a dynamic roaming and traditional static environments, according to various embodiments of the invention.

FIG. 4 is a block diagram illustrating a backend in a system for distributed printing in a dynamic roaming and traditional static environments, according to various embodiments of the invention.

FIG. 5 is a block diagram illustrating a logical path taken by print data in a system for distributed printing in a dynamic roaming and traditional static environments, according to various embodiments of the invention.

FIG. 6 is a diagram illustrating an example of a system for bidirectional print router communications in a distributed printing environment, according to various embodiments of the invention.

FIG. 7 is a block diagram illustrating a logical path taken by a printer feedback message in a system for bidirectional print router communications in a distributed printing environment, according to various embodiments of the invention.

FIG. 8 is a diagram illustrating an example of a system for bidirectional print router communications in a distributed printing environment, according to various embodiments of the invention.

FIGS. 9A and 9B are a block diagrams illustrating respective examples of a print router, according to various embodiments of the invention.

FIG. 10 is a diagram illustrating an example of a system for bidirectional print router communications in a distributed printing environment, according to various embodiments of the invention.

FIG. 11 is a flowchart diagram illustrating an example of a method of printing in a distributed printing environment, according to various embodiments of the invention.

FIG. 12 is a flowchart diagram illustrating an example of a method of printing in a distributed printing environment, according to various embodiments of the invention.

FIG. 13 is a flowchart diagram illustrating an example of a method of printing in a distributed printing environment, according to various embodiments of the invention.

FIG. 14 is a schematic diagram that illustrates a representative device structure that may be used in various embodiments of the present invention

DETAILED DESCRIPTION OF THE INVENTION

The present description sets forth examples of systems, methods, and devices for bidirectional print router communications in a distributed printing environment. In these systems, methods, and devices, a print router receives a print job from a print job source over a unidirectional print data path. The print router forwards the print job to a first print job destination associated with a first printer, and receives a first message from the first printer. The first message may be forwarded to the print job source, and a second message from the print job source may also be received. The print job is then transmitted from the print router to a second print job destination associated with a second printer based on the first message from the first printer, a set of rules, and/or the second message received from the print job source.

This description provides examples, and is not intended to limit the scope, applicability or configuration of the invention. Rather, the ensuing description will provide those skilled in the art with an enabling description for implementing embodiments of the invention. Various changes may be made in the function and arrangement of elements.

Thus, various embodiments may omit, substitute, or add various procedures or components as appropriate. For instance, it should be appreciated that the methods may be performed in an order different than that described, and that various steps may be added, omitted or combined. Also, aspects and elements described with respect to certain embodiments may be combined in various other embodiments. It should also be appreciated that the following systems, methods, devices, and software may individually or collectively be components of a larger system, wherein other procedures may take precedence over or otherwise modify their application.

Systems, devices, methods, and software are described for bidirectional print router communications within a distributed printing environment. In one set of embodiments, shown in FIG. 1, system 100 includes a central server computer system 105, a data store 110, print servers 145, and printers 150. Each of these components may be in communication with each other, directly or indirectly.

The central server computer system 105 may include a rules engine 130, a session manager 135, and a print router 140. The central server computer system 105 may be made up of one or more server computers, workstations, web servers, or other suitable computing devices. The central server computer system 105 may be fully located within a single facility or distributed geographically, in which case a network may be used to integrate different components.

The central server computer system 105 may receive a print job. The print job may be received from a windows session 125. Alternatively, the print job may be received from an application session 115 via a backend 120. The print job may also or alternatively be received from an application session 115 via a cloud computing environment (not specifically shown). The print job may be received from thin-clients (e.g., SUN RAY clients available from Oracle Corporation, WYSE clients available from Wyse Technology, etc.), thick clients (e.g., desktops, laptops), mobile devices, tablets, etc., although these devices are not specifically shown in the diagram Moreover, the print job may be received from any type of desktop or virtual desktop environment. Examples of suitable desktop environments from which the print job may be received include, but are not limited to, LINUX environments based on the open-source Linux kernel; WINDOWS environments based on software available from Microsoft, Inc.; OS/X environments based on software available from Apple, Inc.; VMWARE virtual environments based on software available from VMware, Inc.; CITRIX virtual environments based on software available from Citrix Systems, Inc.; Windows Terminal Services/Remote Desktop virtual environments based on software available from Microsoft, Inc.; ANDROID environments based on software available from Google, Inc.; IOS environments based on software available from Apple, Inc.; WEBOS environments based on software available from Hewlett Packard Company; combinations thereof; and the like. In some embodiments, the central server computer system 105 may receive notice or identification for a print job, and perform the functionality described herein based on such notice or identification only.

Throughout the present application, various examples are given of bidirectional communications between print job sources and print routers 140. The Figures that follow illustrate some of these examples in the context of a backend 120 that implements a unidirectional print data path (e.g., a unidirectional Unix print queue). However, it should be understood that in alternate embodiments the bidirectional communication may be implemented without a backend 120, as shown in FIG. 1 with respect to bidirectional communication between a session (e.g., Windows session 115) or a device and the print router 140.

A set of drivers may be stored at data store 110. Data store 110 may be a single database, or may be made up of any number of separate and distinct databases. The data store 110 may include one, or more, relational databases or components of relational databases (e.g., tables), object databases, or components of object databases, spreadsheets, text files, internal software lists, or any other type of data structure suitable for storing data. Thus, it should be appreciated that a data store 110 may each be multiple data storages (of the same or different type), or may share a common data storage with other data stores. Although in some embodiments the data store 110 may be distinct from a central server computer system 105, in other embodiments it may be integrated therein to varying degrees.

As noted above, notification of a requested print job may be received at the central server computer system 105. A session manager 135 may receive the notification, and may assign a terminal identifier (TID) to a device requesting the job. The central server computer system 105 may identify information about the print job (e.g., identification and location of the applicable print server 145 and printer 150, and identification of the proper driver). Drivers for the print job may be transmitted to the appropriate print server 145 and to the client device requesting the job. The drivers may be installed, and the device and print server 145 may execute the print job with the installed drivers. Thus, the central server computer system 105 may access the data store 110 to distribute drivers to the print server 145 or the device, and thus in some embodiments the drivers do not need to be maintained on each device or print server 145. The drivers may be taken down or uninstalled after each job, set of jobs, or period with no use.

It should be understood that the print servers 145 may be any real or virtual machine or environment that hosts a print driver for controlling a printer 150. Thus, in certain examples a print server 145 may be implemented by circuitry, logic, and/or software within the printer 150. Additionally or alternatively, a print server 145 may include a real or virtual network server and/or a personal computing device in communication with a printer 150.

In some embodiments, the central server computer system 105 may use the information about a print job to identify an appropriate operating system (OS) and print driver for the print server for a given print job. The central server computer system 105 may access the data store 110 to retrieve the operating system and print driver, and build an operating system in real-time in response to receiving a print job. The central server computer system 105 may install the appropriate driver, thus creating a virtual print server (which may, but need not be, print server 145). The virtual print server executes the print job. After the print job is complete, the driver and operating system may be taken down.

In some embodiments, a printer 150 is selected (e.g., automatically or by a user). The print router 140 at the central server computer system 105 may receive the selection. At the print router 140, the selected printer may be mapped to a 1) driver of a table of drivers, and 2) a print server 145 of a table of print servers. In certain examples, this mapping may be performed based on static relationships between printers, drivers, and print servers. For example, these static relationships may be stored as tables within the data store 110.

Additionally or alternatively, a rules engine 130 at the central server computer system 105 may be used in the selection of the printer. The rules engine 130 may be configured to dynamically map a print job to a print server 145 and printer 150 for the print job. By way of example, upon notification or receipt of the print job, the rules engine 130 may access a set of rules to determine the correct print server 145 and printer 150 for the print job. The rules may dynamically make this determination based on the location of the device. The type of device, attributes of the print job, and other factors may be used by the rules engine 130 to determine the correct type and location for the print server 145 and printer 150. This rules engine 130 functionality may not be necessary in all embodiments of the invention to identify an appropriate printer 150, print server 145, or driver for a print job. Accordingly, the rules engine 130 may be eliminated from certain embodiments.

In some embodiments, feedback from a printer 150 is received at the print server 145, and then forwarded on to a print router 140. The print router 140 may route the feedback (e.g., job failed, out of ink, out of paper, etc.) to the client device. This report may be in the form of a dialogue box. The feedback may be routed to avoid the backend 120, even when the print job is initially routed through the backend 120. In response to feedback from a print router 140, a client device may direct or route a print job. This routing may be to a new printer, or may call up alternative functionality (e.g., a new tray) for a printer that is already in use. Thus, instead of unidirectional printing, print jobs (e.g., sent through a backend 120) may be controlled by two-way communication between the print router 140 and the device.

The components of the system 100 may be directly connected, or may be connected via a network (not shown), which may be any combination of the following: the Internet, an IP network, an intranet, a wide-area network (“WAN”), a local-area network (“LAN”), a virtual private network, the Public Switched Telephone Network (“PSTN”), or any other type of network supporting data communication between devices described herein, in different embodiments. A network may include both wired and wireless connections, including optical links. Many other examples are possible and apparent to those skilled in the art in light of this disclosure. In the discussion herein, a network may or may not be noted specifically. If no specific means of connection is noted, it may be assumed that the link, communication, or other connection between devices may be via a network.

Session manager 135 may include an API architecture which serves as the communication control point, managing virtual desktop sessions and brokering sessions for clients to backend 120 virtual desktop and application sessions. The session manager 135 may broker and pass through mechanisms for client devices to active virtual sessions. The central server computer system 105 may include a centralized management console (not shown), which may be a web-based management console for configuration, real time monitoring, and reporting. There may be management capabilities for the entire virtual desktop/application environment.

FIG. 2 shows a block diagram of a central server computer system 105-a. The central server computer system 105-a may be one example of the central server computer system 105 in FIG. 1. The central server computer system 105-a shown in FIG. 2 includes a rules engine 130, a session manager 135, a print router 140-a, and a print server manager 205. The rules engine 130 and the session manager 135 shown in FIG. 2 may be substantially the same as the rules engine 130 and the session manager 135 shown in FIG. 1. The print router 140-a may be one example of the print router 140 shown in FIG. 1.

The print router 140-a may match print jobs received from external sessions 115, 125 to one or more destination printers 150 and/or print servers 145. To accomplish these tasks, the print router 140-a may include at least a print data receiving module 210, a print source identification module 215, a print parameters identification module 220, a printer destination identification module 225, and a printer feedback routing module 230.

The print data receiving module 210 may be configured to receive print data corresponding to a print job from an external session 115, 125 via a communication channel established by the session manager 135. In certain embodiments, the print data received from the external session 115, 125 may be in the form of one or more page description languages (PDLs). Examples of page description languages that may be received at the receiving module 210 include, but are not limited to, PostScript, Portable Document Format (PDF), Printer Command Language (PCL), Scalable Vector Graphics (SVG), Open XML Paper Specification (XPS), and any other page description language that may suit a particular implementation of the principles described herein.

In other embodiments, the print data received from the external session 115, 125 may be in the form of text or images for use with a standard template stored by a print server 145 or a printer 150. For example, the print data may be used to print a personalized bracelet worn by a patient in a medical facility. In this example, the print data may include text corresponding to the name of the patient, and the name of the patient's doctor. This text, when received by a print server 145 or a printer 150, may be applied to a standard bracelet template to print a bracelet having the name of the patient and the name of the patient's doctor.

In additional or alternative embodiments, the print data received by the print data receiving module 210 may be in the form of an image that has already been rasterized by the external session 115, 125 in preparation for delivery to a printer 150.

The print data receiving module 210 may be configured to cache the received print data at a designated storage area. In certain examples, the designated storage area may be in a data store 110. The cached print data may be accessible to the rules engine 130 or any other module or process.

The print source identification module 215 may be configured to analyze the received print data to determine certain attributes or characteristics of the received print data. These attributes or characteristics may also be stored for use by the other modules or processes. For example, the print source identification module 215 may associate the received print data with a format in the data store 110. This format information may be available to the rules engine 130 for use in enforcing one or more rule sets.

In certain examples, the print source identification module 215 may analyze the print data received by the print data receiving module 210 to determine a source of the print data. By way of example, the source may be determined using information from the session manager 135, information acquired by the print data receiving module 210, and/or information attached to the print data itself by the source. Once the print source has been identified, the identity of the print source may be associated with the received print data. For example, the identity of the print source may be stored in the data store 110.

The print parameters identification module 220 may identify certain print parameters for the received print data. These print parameters may be included with the received print data and/or determined by logical deduction (e.g., using the rules engine 130). For instance, a user of an external session 115, 125 may specify a particular print parameter which may be transmitted to the central server computer system 105-a with the print data or logically deduced from the received print data. Additionally or alternatively, certain default print parameters may be determined for the print data based on the identity of the source of the print data and/or another attribute associated with the print data.

Examples of print parameters that may be identified by the print parameters identification module 220 include, but are not limited to, a selected type of printing media, a selected size of printing media, a selected source of printing media, an ink or toner color setting, a collation setting, a staple setting, a duplex setting, a scaling setting, combinations thereof, and the like.

The printer destination identification module 225 may be configured to identify an appropriate destination printer 150 and/or print server 145 for print data received at the print data receiving module 210. The printer destination identification module 225 may identify the appropriate destination printer 150 based on one or more attributes of the print data. In certain examples, the printer destination identification module 225 may pass certain attributes of the print data (e.g., the identity and/or location of the source of the print data determined by the print source identification module 215, the print parameters determined by the print parameters identification module 220, etc.) to the rules engine 130.

The rules engine 130 may apply a certain set of predetermined or dynamically updated rules to the input it receives from the printer destination identification module 225 to determine the destination printer 150 and/or print server 145 for the print data. The destination printer 150 and/or print server 145 determined by the rules engine 130 may then be returned to the printer destination identification module 225.

Alternatively, instead of using a rules engine 130, the printer destination identification module 225 may identify the appropriate destination printer 150 based on static associations between certain attributes and certain destination printers 150.

Once the destination printer 150 and/or print server 145 has been identified for the print data, the print data forwarding module 230 may be configured to forward the print data on to the identified printer 150 and/or print server 145. The print data may be forwarded over a local connection and/or over a network or logical connection. Additionally, in certain examples, the print data forwarding module 230 may be configured to receive feedback from a printer 150 and/or a print server 145 about a specific print job and process the feedback and/or forward the feedback to a third party, such as the source of that particular print job.

The print server manager 205 of the central server computer system 105-a may handle certain aspects related to the distribution of drivers for printers to the print servers 145 and the general maintenance of the print servers 145. Accordingly, the print server manager 205 may include a driver identification module 235, a driver deployment module 240, an operating system identification module 245, and a print server instantiation module 250.

The driver identification module 235 may, in response to a set of print data being assigned to a particular printer 150, determine an appropriate driver for that printer 150. As described above with regard to FIG. 1, the appropriate driver may be selected from a central repository of drivers stored, for example, at data store 110. The driver identification module 235 may be further configured to determine whether an appropriate driver for the selected printer 150 is already installed on a print server 145 chosen to send the print data to the selected printer 150. In certain examples, the driver identification module 235 may compare a version of the driver stored by the chosen print server 145 with a version of the driver stored at the central repository to determine whether the driver stored by the chosen print server 145 is current.

In the event that a determination is made that the chosen print server 145 does not have the appropriate driver or a correct version of the appropriate driver, the driver deployment module 240 may install the appropriate driver on the print server 145. In certain examples, the driver deployment module 240 may access and write to storage associated with the print server 145 via a local connection, network connection, and/or a logical connection to install the appropriate driver to the print server 145.

The operating system identification module 245 may be configured to identify an appropriate operating system associated with an appropriate driver for the selected printer 150. In the event that a print server 145 running the appropriate operating system and in communication with the selected printer 150 does not exist or is unavailable, the print server instantiation module 250 may instantiate a new print server 145. The newly instantiated print server 145 may be created on a dedicated or virtual machine by loading the appropriate operating system to the dedicated or virtual machine. In certain examples, an operating system image having the appropriate driver preinstalled may be used to instantiate the new print server 145.

FIG. 3 is a block diagram of one example of a data store 110-a that may be associated with a central server computer system 105. The data store 110-a shown in FIG. 3 may be an example of data store 110 shown in FIG. 1. As shown in FIG. 3, data store 110-a may store drivers 305, libraries 310, device configurations 315, tables 320, rules 325, and operating system images 330.

Data store 110-a may maintain a repository of drivers 305 for various printers 150 supported by a distributed printing system 100. In accordance with the description of FIGS. 1-2, as a print job is received at the central server computer system 105, the central server computer system 105 may associate the print job with a specific printer 150, dynamically access the data store 110 to retrieve a driver 305 appropriate for the specific printer, and provide the retrieved driver 305 to a print server 145 associated with the specific printer.

Because the drivers 305 are stored centrally at data store 110-a, individual machines implementing sessions 115, 125 and individual print servers 145 need not store a local print driver for each printer supported by the system 100. Moreover, as updated versions of drivers 305 become available, a network administrator may make the updated versions available to each print server 145 in the system by simply updating the repository of drivers 305 stored at the data store 110-a, thereby avoiding the need to roll out driver updates to each print server 145 separately.

The data store 110-a may also store software libraries 310. For example, the data store 110-a may store libraries 310 associated with the drivers 305. In certain embodiments, the libraries 310 may include Dynamic-Link Library (DLL) or Dynamic Shared Object (DSO) files that allow the print servers 145 to dynamically communicate with the sessions 115, 125 which generate the print jobs sent to printers 150. Thus, where the central server computer system 105 provides a driver 305 to a print server 145 for a specific printer 150, the central server computer system 105 may include with the driver 305 one or more DLL files for that printer 150. The DLL(s) files may allow the print server 145 to provide feedback to a session 125 from which a print job originates in a way that is understandable to the session 125. For instance, if a user of the session 125 generates the print job using a print Graphical User Interface (GUI), the DLL transmitted to the print server 145 may allow the print server 145 to provide feedback to the user of the session 125 through the print GUI.

By way of example and not limitation, consider the case where a print job generated by a session 125 has been sent to a print server 145 for printing by a specific printer 150, and that the printer 150 is out of paper. The printer 150 may send a feedback message to the print server 145 indicating that the printer 150 is out of paper, and the print server 145 may provide this feedback message to a print dialog window in the session 125 using a DLL received from the central server computer system 105. This process may allow for a more seamless printing experience for a user of session 125, despite the fact that the session 125 may not locally store a print driver or DLL for communicating with the printer 150.

In certain examples, the data store 110-a may also store device configurations 315, such as settings configurations for printers 150. Thus, when the central server computer system 105 transmits a print job to a print server 145 associated with a specific printer 150, the central server computer system 105 may also include in the transmission a configuration 315 retrieved from the data store 110-a for that printer 150. The configuration 315 may specify, for example, settings such as printer margin settings, duplex settings, paper tray settings, ink color settings, collation settings, and the like. The configuration 315 transmitted to the print server 145 by the central server computer system 105 may be specific to the printer 150, the session 115, 125 generating the print job, and/or the character or content of the print job itself.

Additionally, the data store 110-a may store and maintain various tables 320. The tables 320 may reflect certain relationships present in the system 100. For example, the tables 320 may include one or more tables 320 associating specific sessions 115, 125 with terminal identifiers or node identifiers, one or more tables 320 associating specific sessions 115, 125 with physical locations, one or more tables 320 associating specific printers 150 or print servers 145 with physical locations, one or more tables 320 associating specific sessions 115, 125 with default printers 150, and/or one or more tables 320 tracking any other association in the system 100 that may suit a particular implementation of the principles described herein.

In certain examples, two or more of the tables 320 stored by the data store 110-a may be interrelated in such a way that allows for logical deductions in routing print jobs to print servers 145 or other useful purposes. For instance, the data store 110-a may include: a) a first table 320 associating each terminal identifier at a port with a particular session 115, 125 at a specific physical location; and b) a second table 320 associating each physical location for a session 115, 125 with a default printer 150. In this case, the information in the first table 320 and the second table 320 may be used by the central server computer system 105 to associate a print job received at a port with a specific default printer 150.

The data store 110-a may also include one or more rules 325 for use by the central server computer system 105 in routing received print jobs to print servers 145 and printers 150. As noted above in the description of FIGS. 1-2, the rules engine 130 of the central server computer system 105 may be configured to dynamically map a print job to a print server 145 and printer 150 for the print job by accessing the set of rules 325 stored in the data store 110-a. The rules 325 may take into account factors such as the location of the device generating the print job, the type of device generating the print job, attributes of the print job, and other factors. Some of these factors may be stored in the tables 320.

Additionally, the data store 110-a may include one or more operating system images 330. The operating system images 330 may be used, for example, in the dynamic creation of print servers 145. As described above, certain drivers 305 may not be compatible with the standard operating systems executed by typical print servers 145 in the system 100. Accordingly, when a print job is indicated for a printer 150 using one of these drivers 305, the central server computer system 105 may retrieve a compatible operating system image 330 from the data store 110-a and instantiate a new print server 145 by loading the operating system image 330 onto a real or virtual machine. The newly instantiated print server 145 may then receive the print job from the central server computer system 105 and control the indicated printer 150 using the appropriate driver 305 to complete the print job.

Turning now to FIG. 4, a block diagram is shown of an illustrative backend 120-a for use in a distributed printing system 100. The backend 120-a shown in FIG. 3 may be an example of the backend 120 shown in FIG. 1. The backend 120-a may be configured to forward print data 405 to a next destination in the printing pipeline, such as a central server computer system 105, a print server 145, or a printer 150, as described in more detail below. To accomplish this functionality, the backend 120 may include a receiving module 410 to receive the print data 405 from an application session 115, a backend routing module 415 for determining the next destination of the print data 405, and a transmission module 425 to transmit the print data 405 to the determined next destination. In some examples, the backend 120-a may also include a rasterization module 420 for rasterizing the print data 405 prior to transmitting the print data 405 to the central server computer system 105.

The receiving module 410 of the backend 120-a may be configured to receive the print data 405 over a channel of communication with the application session 115. In some examples, the channel of communication may include one or more local connections (e.g., serial ports, parallel ports, etc.) between the backend 120-a and a device implementing the application session 115. Additionally or alternatively, the channel of communication may include one or more network connections (e.g., Ethernet, WiFi, etc.) and/or logical connections (e.g., where the receiving module 410 of the backend 120-a and the application session 115 are implemented by the same physical machine).

In addition to receiving the print data 405, the receiving module 410 may also identify the application session 115 providing the print data 405. For example, the receiving module 410 may monitor a number of ports associated with various application sessions 115. Each of the application sessions 115 may be assigned a terminal identifier or a node identifier. Thus, when print data 405 is received, the receiving module 410 may take note of the terminal identifier, the node identifier, and/or the port on which the print data is received to associate the print data 405 with a known application session.

The backend routing module 415 may determine the next destination of the print data 405 based on the application session 115 from which the print data 405 was received. To this end, the destination identification module 415 may maintain a table associating specific application sessions 115 with specific destinations. In certain examples, such as in the system 100 of FIG. 1, all print data 405 received at the backend 120-a, regardless of source, may be transmitted by the backend 120-a to a single central server computer system 105.

In alternative examples, the backend 120-a may be communicatively coupled to a number of separate central server computer systems 105 such that print data 405 from different application sessions 115 is transmitted by the backend to different central server computer systems 105. In additional or alternative examples, the backend 120-a may be communicatively coupled to one or more central server computer systems 105 in addition to one or more print servers 145 such that print data 405 from some application sessions 115 is transmitted to a central server computer system 105 and print data 405 from other application sessions 115 is transmitted directly to a print server 145. In these examples, the backend routing module 415 may determine the next destination of each instance of print data 405 based on the application session 115 from which the print data 405 was received.

In certain examples, the backend routing module 415 may further include logic for dynamically determining in real-time how a print job is to be routed. For example, based on certain characteristics of the print data 405, the backend routing module 415 may determine that it would be more appropriate to forward the print data 405 to a central server computer system 105 than to a print server 145 or printer 150. Additionally or alternatively, in examples where the backend 120-a is communicatively coupled to multiple alternative central server computer systems 105, the backend routing module 415 may perform load balancing in its distribution of different print jobs between the separate central server computer systems 105.

As mentioned above, in certain embodiments the backend 120-a may include a rasterization module 420. The rasterization module 420 may convert the received print data 405 into a raster image that can be understood by a printer. In other embodiments, the print data 405 may already have been rasterized by the application session 115 from which the print data 405 was received. In still other embodiments, the print data 405 may be rasterized at a print server 145 prior to printing.

The transmission module 425 of the backend 120-a may transmit the received print data 405 to the destination determined by the next destination identification module 415. This transmission may occur over one or more local connections (e.g., serial ports, parallel ports), one or more network connections (e.g., Ethernet, WiFi), and/or one or more logical connections (e.g., where the backend 120 and the next destination are implemented by the same physical machine). In certain examples, the transmission module 425 of the backend 120-a may transmit the print data to the next destination over a unidirectional print data path (e.g., using one or more unidirectional print data queues).

FIG. 5 illustrates a diagram of one illustrative path 500 of print data 405 through a distributed printing system. The print data 405 may first be generated and transmitted to a central server computer system 105-b by a session 125. The central server computer system 105-b may be an example of the central server computer system 105 of FIG. 1 or FIG. 2. The session 125 may include an application executed by a host device. In certain examples, a user of the application issues a command to print data generated or hosted by the application.

In certain embodiments, the session 125 may transmit the print data 405 directly to the central sever computer system 105-b. Alternatively, the session 125 may utilize a backend 120 to transmit the print data 405 to the central server computer system 105. The central server computer system 105-b may perform session identification 510 to determine the source of the print data 405. For example, the central server computer system 105-b may look up a terminal identifier and/or a port associated with the print data 405 in a table to identify a device from which the print data 405 originated.

Once the source of the print data 405 is known, the central server computer system 105-b may perform print routing 515 on the print data 405 to select an appropriate printer 150-a for the print data 405. The printer 150-a may be an example of one of the printers 150 shown in FIG. 1. The print routing 515 may include applying a set of rules to one or more parameters associated with the print data 405 and/or the identified session 125. Additionally, the central server computer system 105-b may retrieve 520 an appropriate driver 305-a for the identified printer 150-a from a data store 110. The driver 305-a may be transmitted, together with the print data 405, from the central server computer system 105-b to a print server 145-a associated with the identified printer 150-a. The print server 145-a may be an example of the print server 145 shown in FIG. 1. In certain examples, as described above, the print server 145-a may be dynamically instantiated in response to a particular printer 150-a being selected for the print data 405.

The print server 145-a may install 530 the driver 305-a received from the central server computer system 105-b to enable the print server 145-a to communicate with the selected printer 150-a. Additionally, the print server may perform spooling 535 operations to receive and collect the print data 405, scheduling 540 operations to schedule the print data 405 for printing by the printer 150-a, and one or more conversion 545 operations to transform the print data into a format understood by the printer 150-a. In certain examples, the conversion 545 operations may include rasterization of the print data 405. The print server 145-a may then transmit the print data 405 to the selected printer 150-a over a local connection, a network connection, and/or a logical connection for printing.

It is worth noting that while an entire distributed printing system 100 has been described as a whole for the sake of context, the present specification is directed to methods, systems, and apparatus that may be used with, but are not tied to the system 100 of FIGS. 1-5. Individual aspects of the present specification may be broken out and used exclusive of other aspects of the foregoing description. This will be described in more detail, below.

In one set of embodiments, systems, devices, methods, and software are described for bidirectional print router communication in a distributed printing environment. FIG. 6 illustrates an example system 600 for bidirectional print router communications in a distributed printing environment. The system 600 includes a print job source 605, a backend 120-b, a print router 140-b, a first print job destination 620-a associated with printer 150-b, and a second print job destination 620-b associated with printer 150-c. Each of these components may be in communication with each other, directly or indirectly. This system 600 may be the system 100 described above with reference to FIG. 1, and the print router 140-b may be an example of the print router 140 described above with reference to FIG. 1, 2, or 5.

In certain examples, one or both of the print job destinations 620 may include a print server, such as the print server 145 described above with reference to FIG. 1, 2, or 5. Note, however, that one or more print job destinations 620 may be a virtual print server, and thus in some embodiments both the print router 140-b and one or more print job destinations 620 may be part of the central server computer system 105 of FIG. 1 or 3. In other examples, one or more print job destinations 620 may be the printer 150 associated with the print job destination 620 and/or circuitry or logic within the associated printer 150 for receiving the print data for the print job. In still other examples, one or more print job destinations 620 may be associated with different types of printing functionality (tray selection, ink/toner selection, media selection, other settings, etc.) for a printer 150. For example, a single printer 150 may implement one print job destination 620 associated with printing from a first tray and another print job destination 620 associated with printing from a second tray.

The print job source 605 may transmit 610-a print data for a print job to backend 120-b (the print data may be directed to a particular port number). The print job source 605 may be a user or application session (e.g., sessions 115, 125 of FIG. 1) and/or a specific device that generates the print data for the print job. The backend 120-b may include one or more servers, and may include a Unix or Unix-like environment with a number of unidirectional print queues. For example, the backend 120-b may include a Unix Transport Control Protocol/Internet Protocol (TCP/IP) backend that supports unidirectional print queues based on the Line Printer Daemon/Line Printer Remote protocol.

From the backend 120-b, the print data for the print job may be transmitted 610-b (again including the port number) along a unidirectional print path (e.g., through unidirectional print queues) to the print router 140-b. The print router 140-b may receive and store the print data and associated port, and may identify the printer to be used based on the port number, one or more other attributes of the print data, location information associated with the print job source, and/or any other criterion that may suit a particular implementation of the principles of this disclosure. The print router 140-b may transmit or otherwise provide 610-c the print data to the first print job destination 620-a associated with printer 150-b. In examples where the first print job destination 620-a is a print server, the first print job destination 620-a may process the print data for the print job and transmit 610-d the print data to printer 150-b for printing. In examples where the first print job destination 620-a is the printer 150-b itself, the first print job destination 620-a may receive the print data for the print job in preparation for printing the print job.

The printer 150-b may generate a feedback message related to the print job (job failed, job succeeded, out of paper for targeted tray, etc.). The feedback message may be transmitted 615-a to the print router 140-b (e.g., by way of the first print job destination 620-a), which may intercept or otherwise receive the feedback. The print router 140-b may route 615-b the feedback message to the print job source 605 (e.g., by appending an IP address and transmitting the feedback via a network) along a network path that is separate from the unidirectional print data path of the backend 120-b. The print router 140-b may also include availability information for other printers (e.g., availability of printer 150-c, received via path 1310-b) with the feedback message. In certain examples, the print router 140-b may determine an availability of a number of possible alternative printers or other print destinations prior to routing the feedback message to the print job source 605.

The print job source 605 may select an alternative printer (e.g., selecting printer 150-c using a drop down menu). Additionally or alternatively, the print job source 605 may call up alternative functionality (e.g., a different tray) for the original printer or the selected alternative printer. The selection may be transmitted 615-b to print router 140-e over a network path separate from the backend 120-b. Print router 140-b may access the previously stored print data for the print job, and forward the print data to the second print job destination 620-b associated with the selected alternative printer 150-c based on a set of rules, the user selection, and/or the feedback message from printer 150-b. In examples where the second print job destination 620-b is a print server, the second print job destination 620-b may forward 615-d the print data to the selected alternative printer 150-c. In examples where the second print job destination 620-b is the selected alternative printer 150-c itself, the second print job destination 620-b may receive the print data in preparation for printing. In any event, as shown in FIG. 6, in some embodiments the print data does not have to be re-sent through the backend 120-b if the initial printer 150-b is not available for use. Instead, the print router 140-b may use the stored print data, forwarding it according to the new selection.

Referring next to FIG. 7, an example of a path 700 for a feedback message 705 from a printer 150-d to a device 735 is shown. The feedback message 705 may be an example of the feedback message described above with reference to FIG. 6. The path 700 may include a print server 145-b, a print router 140-c, and a network 730. The printer 150-d may be an example of printer 150 described above with reference to FIG. 1, 5, or 6 and/or print job destination 620 described above with reference to FIG. 6. The print server 145-b may be an example of print server 145 described above with reference to FIG. 1 or 5 and/or print job destination 620 described above with reference to FIG. 6. The print router 140-c may be an example of print router 140 described above with reference to FIG. 1, 2, 5, or 6. The print router 140-c may be associated with a data store 110-b, which may be an example of data store 110 described above with reference to FIG. 1 or 3. The device 735 may be an example of print job source 605 described above with reference to FIG. 6. Additionally, the device 735 may implement one or more of the sessions 115, 125 described above with reference to FIG. 1.

The feedback message 705 may include status information (e.g., availability of the printer 150-d) generated in response to receipt of a print job by the printer 150-d. The printer 150-d may transmit the status information to the print server 145-b in a format understood by the print server 145-b and/or the print router 140-c. The print server 145-b may forward the feedback message 705 to the print router 140-c. The print router 140-c may identify the device 735 as the source (e.g., print job source 605 of FIG. 6) of a print job related to or associated with the feedback message 705 from the printer 150-d. This identification may occur based on a direct or indirect indication within the feedback message 705 or the print job.

The print router 140-c may communicate with the data store 110-c to access a dynamic link library (DLL) file 710 from a repository of shared libraries 310-b stored by the data store 110-c. The DLL file 710 may be associated with the device 735 identified as the print job source, the printer 150-d, and/or the print server 145-b. In certain examples, the print router 140-c may query the data store 110-b for the DLL file 710 using at least one attribute of the device 735, the printer 150-d, or the print server 145-b. The DLL file 710 may provide one or more functions that allow the print router 140-c to interact with the device 735 such that the device 735 processes the feedback message 705 in a particular manner. For example, the print router 140-c may call a function in the DLL file 711, or cause the device 735 to call a function in the DLL file 711, that formats the feedback message 705 as a dialogue box for display by the device 735 to a user. The print router 140-c may also call one or more function ins the DLL file 711 to generate a prompt 725 to select an alternative printer for display by the device 735 to the user.

In other examples, the printer router 140-c may retrieve a different type of shared library file for transmitting the message 705 to the device 735. For instance, the print router 140-c may retrieve a dynamic shared object (DSO) file instead of a DLL file 710 if the device 735 runs a Unix operating system or a Unix-like operating system (e.g., OS/X, Linux, FreeBSD, etc.).

The print router 140-c may encapsulate the feedback message 705 and the prompt 725, as modified or formatted using the DLL file 710, into one or more IP packets 720 for transmission to the device 735 over the network 730. The packet(s) 720 may include an IP address 725 for the device 735. The packet(s) 720 may be transmitted to the device 735 over a network path that is separate from a unidirectional print data path (e.g., through backend 120 of FIG. 1, 4, or 6) used by the device 735 to initially transmit the print job to the print router 140-c. Upon receiving the packet(s) 720 over the network 730, the device 735 may process the feedback message 705 and the prompt 725. For example, the device 735 may display the feedback message 705 to a user in a dialogue window generated with the DLL file 710, where the dialogue window prompts the user to select an alternative printer.

FIG. 8 illustrates an example system 800 for bidirectional print router communications in a distributed printing environment. The system 800 includes a device 735-a, a backend 120-c, a print router 140-d, a first print server 145-c associated with printer 150-e, a second print server 145-d associated with printer 150-f, and a rules engine 130-a. Each of these components may be in communication with each other, directly or indirectly.

This system 800 may be the system 100, 600 described above with reference to FIG. 1 or 6, and the print router 140-c may be an example of the print router 140 described above with reference to FIG. 1, 5, 6, or 7. The device 735-a may be an example of the print job source 605 described above with reference to FIG. 6 and/or the device 735 described above with reference to FIG. 7. The print servers 145 may be examples of the print servers 145 described above with reference to FIG. 1, 5, or 7, and/or the print job destinations 610 described above with reference to FIG. 6. The printers 150 may be examples of the printers 150 described above with reference to FIG. 1, 5, 6, or 7, and/or the print job destinations 610 described above with reference to FIG. 1, 5, or 7. The rules engine 130-a may be an example of the rules engine 130 described above with reference to FIG. 1.

The device 735-a may transmit 810-a print data for a print job to backend 120-c (the print data may be directed to a particular port number). The backend 120-c may include one or more servers, and may include a Unix or Unix-like environment with a number of unidirectional print queues. From the backend 120-c, the print data for the print job may be transmitted 810-b (again including the port number) along a unidirectional print path (e.g., through unidirectional print queues) to the print router 140-d. The print router 140-b may receive and store the print data and associated port, and may identify the printer to be used based on the port number, one or more other attributes of the print data, location information associated with the print job source, and/or any other criterion that may suit a particular implementation of the principles of this disclosure. The print router 140-d may transmit or otherwise provide 810-c the print data to the first print server 145-c associated with printer 150-e. The first print server 145-c may process the print data for the print job and transmit 810-d the print data to printer 150-e for printing.

The printer 150-e may generate a feedback message related to the print job (job failed, job succeeded, out of paper for targeted tray, etc.). The feedback message may be transmitted 815-a to the print router 140-d (e.g., by way of the first print server 145-c), which may intercept or otherwise receive the feedback. The rules engine 130-a in communication with the print router 140-d may enforce a set of one or more rules to dynamically select an alternative printer 150-f to which the stored print data may be rerouted.

In certain examples, upon receiving the feedback message from the first printer 150 e, the print router 140-d may query the rules engine and reroute the print data without input from the user of device 305-f Alternatively, the print router 140-d may also receive a message from the device 735-a over a network path 815-b separate from the unidirectional print data path of the backend 120-c. The message from the device 735-a may include a user selection of an alternative printer 150-f or other data that may be used to dynamically reroute.

In these examples, the print router 140-d may dynamically reroute the stored print data based on one or more of a) the message received from the first printer 150-e, b) the message received from the device 735-a, and/or c) the set of rules enforced by the rules engine 130-a.

In another example, assume the printer 150-e generated feedback related to a printer status (out of order, out if ink, out of paper, etc.) before or after a new print job is received at print router 140-d. The rules engine 130-a in communication with the print router 140-d may generate and/or enforce rules to automatically reroute print data destined for an inoperable or otherwise unavailable printer (e.g., rerouting a print job from printer 150-e to printer 150-f) based on a determination that the printer 150-e is unavailable and that the alternative printer 150-f is available.

The print router 140-d may transmit 815-c the stored print data for the print job to the print server 145-d associated with the selected alternative printer 150-f. The print server 145-d may then process the print data and transmit 815-d the print data to the selected alternative printer 150-f for printing.

FIG. 9A and FIG. 9B are block diagrams illustrating examples of print routers 140 for managing printer feedback in a distributed printing environment. The print routers 140-e, 140-f may be an example of the print router 140 described above with reference to FIG. 1, 2, 5, 6, or 7 above.

The print router 140-e of FIG. 9A includes a print data receiving module 210-a, a print data forwarding module 230-a, and a message processing module 905. Each of these components may be in communication, directly or indirectly. The print data receiving module 210-a and the print data forwarding module 230-a may be examples of the print data receiving module 210 and print data forwarding module 230 described above with reference to FIG. 2.

The print data receiving module 210-a may be configured to receive a print job from a print job source (e.g., print job source 605 of FIG. 6) over a unidirectional print data path. The print job source may include, for example, an application session or a device that generates print data. The unidirectional print data path may include, for example, a unidirectional print queue of a backend (e.g., backend 120 of FIG. 1, 4, or 6). The print data receiving module 210-a may receive the print job by receiving print data generated by the print job source.

The print data forwarding module 230-a may be configured to forward the print job to one or more print job destinations (e.g., print job destination 620 of FIG. 6). The print job destination(s) may be associated with a printer (e.g., printer 150 of FIG. 1, 5, 6, or 7) from a plurality of printers in communication with the print router 140-e. As described above, in certain examples a print job destination may be the printer itself or a print server (e.g., print server 145 of FIG. 1, 5, or 7) associated with the printer.

The message processing module 905 may include a message receiving submodule 910 and a print job rerouting submodule 915. The message receiving submodule 910 may be configured to receive a message from the printer originally receiving the print job. The message may be a status or other printer feedback message. The message may relate to a specific print job and/or be intended for a specific print job source.

The print job rerouting submodule 915 may be configured to trigger the print data forwarding module 230-a to transmit the same print job (e.g., from a copy of the print job stored at the print router 140-e) to an alternative print job destination associated with an alternative printer based at least on the message received from the first printer and a set of rules (e.g., enforced by rules engine 130 of FIG. 1 or 8). For example, if the message indicates that the original printer is unavailable, the set of rules may be applied to the message and to location information associated with the print job source, location information associated with the original print job destination, and/or location information associated with one or more alternative print job destination to identify an alternative printer that is available and geographically close to the print job source. Additionally or alternatively, as described in continuation with respect to FIG. 9B, the print job rerouting submodule 915 may take into account input from the print job source in determining an alternative printer for the print job.

Referring next to FIG. 9B, another example of a print router 140-f includes a print data receiving module 210-a, a print data forwarding module 230-a, and a message processing module 905-a. Each of these components may be in communication, directly or indirectly. The print data receiving module 210-a and the print data forwarding module 230-a may be examples of the print data receiving module 210 and print data forwarding module 230 described above with reference to FIG. 2 or 9A. The message processing module 905-a may be an example of the message processing module 905 described above with respect to FIG. 9A.

The message processing module 905-a of the present example may include a message receiving submodule 910-a and a print job rerouting submodule 915-a that perform substantially the same functions described above with respect to the message receiving submodule 910 and print job rerouting submodule 915 of FIG. 9A. Additionally, the message processing module 905-a may include a message forwarding submodule 920 and an alternative printer selection receiving submodule 925.

The message forwarding submodule 920 may be configured to transmit the message received at the message receiving module 910-a from the originally selected printer to a specific print job source. In certain examples, the message received from the originally selected printer may directly or indirectly identify the specific print job and/or print job source to which the message relates. Additionally or alternatively, the message receiving submodule 910-a may identify the print job source based on at least one attribute of the print job determined from the content of the message or from a locally stored copy of the print job. Thus, the message receiving module 910-a may determine that the message is associated with a specific print job and associate the message with a print job source based on a stored or implied association of the print job source with the print job.

The message forwarding submodule 920 may transmit the message to the specific print job source. In certain examples, the message may be transmitted to the print job source over a network path that is separate from a unidirectional print data path over which the related print job was originally received from the print job source. In certain examples, transmitting the message over the network path may include appending a network address of the print job source to the message and/or encapsulating the message into one or more network packets directed to the network address of the print job source. The network address of the print job source may be dynamically or statically identified based on at least one attribute of the print job or a mapping table.

In certain examples, the message forwarding submodule 920 may communicate with a central data store (e.g., data store 110 of FIG. 1, 3, or 7) to retrieve a shared library (e.g., libraries 310 of FIG. 3 or 7, or DLL file 710 of FIG. 7) associated with the printer or the print job source. The message forwarding submodule 920 may call, or instruct the print job source to call, at least one function in the shared library for transmitting the message from the printer to the print job source. For example, the message forwarding submodule 920 may call, or instruct the print job source to call, at least one function in the shared library to generate a dialogue box displaying the message from the printer at the print job source and prompting a user of the print job source to select an alternative printer for the print job.

The alternative printer selection receiving submodule 925 may be configured to receive a message from the print job source that specifies an alternative printer selection for the print job. This selection may be provided by the print job source in response to a prompt, as described above. Alternatively, the selection of the alternative printer for the print job may be provided by the print job source without solicitation in response to receiving the message generated by the original printer.

In certain examples, the print job rerouting submodule 915-a may defer to the alternative printer selection provided by the print job source in determining how to reroute the print job. In additional or alternative examples, the print job rerouting submodule 915-a may apply a weighted set of rules to various factors, including the alternative printer selection provided by the print job source, to determine how to reroute the print job.

Referring next to FIG. 10, a block diagram is shown of another example of a distributed printing system 1000. The system 1000 of this example includes a device 735-b, a backend 120-d, a central server computer system 105-c, a data store 110-c, and a plurality of printers 150. Each of these components may be in communication, directly or indirectly.

The system 1000 may be an example of the systems 100, 600 described above with respect to FIG. 1, 6, or 8. The device 735-b may be an example of the device 735 described above with respect to FIG. 7 or 8 and/or the print job source 605 described above with respect to FIG. 6. The backend 120-c may be an example of the backend 120 described above with respect to FIG. 1, 4 or 6. The central server computer system 105-c may be an example of the central server computer system 105 described above with reference to FIG. 1, 2, or 5. The data store 110-d may be an example of the data store 110 described above with reference to FIG. 1, 2, or 7. The printers 150 may be an example of the printers 150 described above with reference to FIG. 1, 5, 6, or 7 and/or the print job destinations 610 described above with respect to FIG. 6.

As shown in FIG. 10, the central server computer system 105-c of the present example implements a print router 140-f and a number of print servers 145. The print router 140-f may be an example of the print router 140 described above with reference to FIG. 1, 2, 6, 7, 8, 9A, or 9B, and the print servers 145 may be examples of the print servers 145 described above with reference to FIGS. 1, 5, 7, and 8 and/or the print job destinations 610 described above with reference to FIG. 6. In certain examples, the central server computer system 105-c may also implement the data store 110-d.

The device 735-b may transmit print data for a print job to the central server computer system 105-c over a unidirectional print data path 1005 associated with the backend 120-c. For example, the unidirectional data path 905 may include one or more unidirectional print queues. The print router 140 implemented by the central server computer system 105-c may receive the print job, select print server 145-e as the print job destination, and transmit the print job to print server 145-e. The selected print server 145-e may process the print job and transmit the print job to printer 150-g associated with the selected print server 145-e for printing.

Before, during, or after printing the print job, the printer 150-g may provide a status or other feedback message to the associated print server 145-e. The associated print server 145-e may in turn forward the message to the print router 140-f The print router 140-f may identify the print job to which the message pertains, identify device 735-b as the print job source for that particular print job, and transmit the message to the device 735-b over a network path 1010 that is separate from the unidirectional print data path 1005. The print router 140-b may retrieve one or more shared libraries or other auxiliary files from the data store 110-d for use in transmitting the message to the device 735-b, as described above. The transmission to the device 735-b may include the message from the printer 150-g and a prompt for a user of the device 735-b to select an alternative printer 150-h for the print job. This selection may be transmitted to the print router 140-f over network path 1010 or another network path.

As described above, the print router 140-f may apply a set of rules to the user selection and/or other factors (e.g., attributes of the print job, location information, status of printer 150-g, etc.) to identify printer 150-h as an alternative printer for the print job and transmit the print job to print server 145-f Print server 145-f may process the print job and transmit the print job to printer 150-h for printing.

Referring next to FIG. 11, a flow chart is shown illustrating an example of a method 1100 for printing in a distributed printing environment according to various embodiments of the invention. This method 1100 may, for example, be performed in whole or in part by the central server computer system 105 of FIG. 1, 2, 5, or 10, and/or the print router 145 of FIG. 1, 2, 6, 7, 8, 9A, 9B, or 10.

At block 1105, a print job is received at a print router from a print job source over a unidirectional print data path. In certain examples, the print job source may be a device or a user or application session. At block 1110, the print job is transmitted from the print router to a first print job destination associated with a first printer of a plurality of printers in communication with the print router. In certain examples, the print job destination may be a printer or a print server. At block 1115, a message is received from the first printer at the print router. At block 1120, print job is transmitted from the print router to a second print job destination associated with a second printer of the plurality of printers based on the first message from the first printer and a set of rules.

Referring next to FIG. 12, a flow chart is shown illustrating an example of a method 1200 for printing in a distributed printing environment according to various embodiments of the invention. This method 1200 may, for example, be performed in whole or in part by the central server computer system 105 of FIG. 1, 2, 5, or 10, and/or the print router 145 of FIG. 1, 2, 6, 7, 8, 9A, 9B, or 10.

At block 1205, a print job is received at a print router from a print job source over a unidirectional print data path of a backend. At block 1210, the print job is transmitted from the print router to a first print server associated with a first printer of a plurality of printers in communication with the print router. At block 1215, a failure message is received from the first printer at the print router. At block 1220, the failure message is transmitted to the print job source from the print router over a network path that is separate from the unidirectional print data path. At block 1225, a message is received from the print job source. At block 1230, the print job is transmitted from the print router to a second print job destination associated with a second printer of the plurality of printers based on the first message from the first printer, a set of rules, and the message from the print job source.

Referring next to FIG. 13, a flow chart is shown illustrating an example of a method 1300 for printing in a distributed printing environment according to various embodiments of the invention. This method 1300 may, for example, be performed in whole or in part by the central server computer system 105 of FIG. 1, 2, 5, or 10, and/or the print router 145 of FIG. 1, 2, 6, 7, 8, 9A, 9B, or 10.

At block 1305, a print job is received at a print router from a print job source over a unidirectional print data path of a backend. At block 1310, the print job is transmitted from the print router to a first print server associated with a first printer of a plurality of printers in communication with the print router. At block 1315, a failure message is received from the first printer at the print router. At block 1320, the failure message is transmitted to the print job source from the print router with the identification of a number of available alternative printers and a prompt to select one of the available alternative printers. These items are transmitted to the print job source over a network path that is separate from the unidirectional print data path. In certain examples, the print router may determine the availability of a number of possible alternative printers prior to transmitting the identification of the number of available alternative printers. At block 1325, a message is received from the print job source identifying a selection of one of the available alternative printers. At block 1330, the print job is transmitted from the print router to a second print job destination associated with a second printer of the plurality of printers based on the first message from the first printer, a set of rules, and the message from the print job source. In certain examples, the second printer may be the available alternative printer selected by the print job source.

A device structure 1400 that may be used for one or more components of the central server computer system 105 of FIG. 1, 2, 5, or 10, the print router 140 of FIG. 1, 2, 5, 6, 7, 8, 9A, 9B, or 10, the print job source 605 of FIG. 6, the print job destination 615 of FIG. 6, the device 735 of FIG. 7 or 9, the backend 120 of FIG. 1, 4, 6, or 9, the print server 145 of FIG. 1, 2, 5, 7, or 9, or for other computing devices or printers described herein, is illustrated with the schematic diagram of FIG. 14.

This drawing broadly illustrates how individual system elements of each of the aforementioned devices may be implemented, whether in a separated or more integrated manner. Thus, any or all of the various components of one of the aforementioned devices may be combined in a single unit or separately maintained and can further be distributed in multiple groupings or physical units or across multiple locations. The example structure shown is made up of hardware elements that are electrically coupled via bus 1405, including processor(s) 1410 (which may further comprise a digital signal processor (DSP) or special-purpose processor), storage device(s) 1415, input device(s) 1420, and output device(s) 1425. The storage device(s) 1415 may be a machine-readable storage media reader connected to any machine-readable storage medium, the combination comprehensively representing remote, local, fixed, or removable storage devices or storage media for temporarily or more permanently containing computer-readable information. The communications system(s) interface 1445 may interface to a wired, wireless, or other type of interfacing connection that permits data to be exchanged with other devices. The communications system(s) interface 1445 may permit data to be exchanged with a network.

The structure 1400 may also include additional software elements, shown as being currently located within working memory 1430, including an operating system 1435 and other code 1440, such as programs or applications designed to implement methods of the invention. It will be apparent to those skilled in the art that substantial variations may be used in accordance with specific requirements. For example, customized hardware might also be used, or particular elements might be implemented in hardware, software (including portable software, such as applets), or both.

It should be noted that the methods, systems and devices discussed above are intended merely to be examples. It must be stressed that various embodiments may omit, substitute, or add various procedures or components as appropriate. For instance, it should be appreciated that, in alternative embodiments, the methods may be performed in an order different from that described, and that various steps may be added, omitted or combined. Also, features described with respect to certain embodiments may be combined in various other embodiments. Different aspects and elements of the embodiments may be combined in a similar manner. Also, it should be emphasized that technology evolves and, thus, many of the elements are exemplary in nature and should not be interpreted to limit the scope of the invention.

Specific details are given in the description to provide a thorough understanding of the embodiments. However, it will be understood by one of ordinary skill in the art that the embodiments may be practiced without these specific details. For example, well-known circuits, processes, algorithms, structures, and techniques have been shown without unnecessary detail in order to avoid obscuring the embodiments.

Also, it is noted that the embodiments may be described as a process which is depicted as a flow diagram or block diagram. Although each may describe the operations as a sequential process, many of the operations can be performed in parallel or concurrently. In addition, the order of the operations may be rearranged. A process may have additional steps not included in the figure.

Moreover, as disclosed herein, the term “memory” or “memory unit” may represent one or more devices for storing data, including read-only memory (ROM), random access memory (RAM), magnetic RAM, core memory, magnetic disk storage mediums, optical storage mediums, flash memory devices or other computer-readable mediums for storing information. The term “computer-readable medium” includes, but is not limited to, portable or fixed storage devices, optical storage devices, wireless channels, a sim card, other smart cards, and various other mediums capable of storing, containing or carrying instructions or data.

Furthermore, embodiments may be implemented by hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof. When implemented in software, firmware, middleware or microcode, the program code or code segments to perform the necessary tasks may be stored in a computer-readable medium such as a storage medium. Processors may perform the necessary tasks.

Having described several embodiments, it will be recognized by those of skill in the art that various modifications, alternative constructions, and equivalents may be used without departing from the spirit of the invention. For example, the above elements may merely be a component of a larger system, wherein other rules may take precedence over or otherwise modify the application of the invention. Also, a number of steps may be undertaken before, during, or after the above elements are considered. Accordingly, the above description should not be taken as limiting the scope of the invention. 

1. A distributed printing system, comprising: a plurality of printers; a print job source configured to generate a print job; a backend in communication with the print job source, the backend configured to: receive the print job from the print job source; and transmit the print job over a unidirectional print data path to a print router; and the print router in communication with a plurality of print job destinations associated with the plurality of printers, wherein the print router is configured to: receive the print job from the backend over the unidirectional print data path of the backend; transmit the print job to a first print job destination associated with a first printer of the plurality of printers; receive a first message from the first printer; receive a second message from the print job source over a network path separate from the unidirectional print data path of the backend; and transmit the print job to a second print job destination associated with a second printer of the plurality of printers based on the first message from the first printer and the second message from the print job source.
 2. The system of claim 1, wherein the print router is further configured to: transmit the first message from the print router to the print job source; and receive a selection of the second printer from the print job source.
 3. The system of claim 2, wherein the print router is further configured to: retrieve a shared library associated with the print job source from a centralized data store; and invoke at least one function in the shared library to prompt the selection of the second printer at the print job source.
 4. The system of claim 1, wherein the print router is further configured to: dynamically identify the second printer based on at least one attribute of the print job.
 5. The system of claim 1, wherein the print router is further configured to: determine from the first message that the first printer is unavailable; and dynamically identify the second printer based on an availability of the second printer.
 6. A method of printing in a distributed printing environment, comprising: receiving a print job at a print router from a print job source over a unidirectional print data path; transmitting the print job from the print router to a first print job destination associated with a first printer of a plurality of printers in communication with the print router; receiving a first message from the first printer at the print router; and transmitting the print job from the print router to a second print job destination associated with a second printer of the plurality of printers based on the first message from the first printer and a set of rules.
 7. The method of claim 6, further comprising: receiving a second message from the print job source over a network path separate from the unidirectional print data path; wherein the print job is transmitted from the print router to the second print job destination further based on the second message from the print job source.
 8. The method of claim 7, further comprising: receiving a selection of the second printer in the second message from the print job source.
 9. The method of claim 8, further comprising: retrieving a shared library associated with the print job source from a centralized data store; and invoking at least one function in the shared library to prompt the selection of the second printer at the print job source.
 10. The method of claim 11, further comprising: determining that the first message is associated with the print job; and associating the first message with the print job source based on an association of the print job source with the print job.
 11. The method of claim 6, further comprising: transmitting the first message from the print router to the print job source.
 12. The method of claim 11, further comprising: appending a network address associated with the print job source to the first message.
 13. The method of claim 6, further comprising: dynamically identifying the second printer based on at least one attribute of the print job.
 14. The method of claim 13, wherein the at least one attribute of the print job comprises at least one of a location associated with the print job source, a location associated with the first print job destination, or a location associated with the second print job destination.
 15. The method of claim 6, further comprising: determining from the first message that the first printer is unavailable; and dynamically identifying the second printer based on an availability of the second printer.
 16. The method of claim 6, wherein the first print job destination associated with the first printer comprises at least one of the first printer or a print server in communication with the first printer.
 17. The method of claim 6, wherein the unidirectional print data path comprises a unidirectional print data queue associated with a backend.
 18. A print router apparatus, comprising: a print data receiving module configured to receive a print job from a print job source over a unidirectional print data path of a backend; a print data forwarding module, communicatively coupled with the print data receiving module, and configured to transmit the print job from the print router to a first print job destination associated with a first printer of a plurality of printers; and a message processing module configured to receive a first message from the first printer and trigger the print data forwarding module to transmit the print job to a second print job destination associated with a second printer of the plurality of printers based on the first message from the first printer and a set of rules.
 19. The print router apparatus of claim 18, wherein the message processing module is further configured to: receive a second message from the print job source over a network path separate from the unidirectional print data path of the backend; and wherein the print job is transmitted from the print router to the second print job destination further based on the second message from the print job source.
 20. The print router apparatus of claim 18, further comprising: a message forwarding module configured to transmit the message to the print job source; and an alternate selection receiving module configured to receive a selection of the second printer from the print job source. 